﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace SistemaGO_Library.Entidades.Ocorrencia
{
    class CadastroOcorrencia
    {
        private IRepositorioOcorrencia ocorrencias;

        public CadastroOcorrencia(IRepositorioOcorrencia repOco){
            this.ocorrencias = repOco;
        }

        public int inserirOcorrencia(Ocorrencia oco) {
            if (oco != null && !ocorrencias.existeOcorrencia(oco.Ocorrencia_cod)) {
                return ocorrencias.inserirOcorrencia(oco);
            } else {
                throw new Exception("Ocorrência Já Existente ou Nulo");
            }
        }

        public Ocorrencia buscarOcorrencia(int cod) {
            Ocorrencia oco = new Ocorrencia();
            oco = null;
            if (ocorrencias.existeOcorrencia(cod)) {
                oco = ocorrencias.buscarOcorrencia(cod);
            } else {
                throw new Exception("Ocorrência Não Encontrada");
            }
            return oco;
        }

        public void alterarOcorrencia(int cod, Ocorrencia novaOcorrencia) {
            if (ocorrencias.existeOcorrencia(cod)) {
                ocorrencias.alterarOcorrencia(cod, novaOcorrencia);
            } else {
                throw new Exception("Erro ao alterar ocorrência");
            }
        }

        public void cancelarOcorrencia(int cod, String descricao) {
            if (cod < 0) {
                throw new Exception("Erro ao excluir ocorrência");
            } else {
                ocorrencias.cancelarOcorrencia(cod, descricao);
            }
        }

        public int buscarCodigoOcorrencia() {
            return ocorrencias.buscarCodigoOcorrencia();
        }

        public void vincularFiscal(int cod, string nome)
        {
            if (cod > 0 && !nome.Equals("")) {
                ocorrencias.vincularFiscal(cod, nome);
            } else {
                throw new Exception("Erro ao vincular fiscal com a ocorrência");
            }            
        }

        public void mudarSituacao(string newSituacao, int cod) {
            ocorrencias.mudarSituacao(newSituacao, cod);
        }

        public ArrayList gerarRelatorio(int codigo_busca, DateTime data1, DateTime data2, string bairro, string denunciante)
        { 
            return ocorrencias.gerarRelatorio(codigo_busca, data1, data2, bairro, denunciante);
        }
    }
}
